This is how a chronicle report looks
This is a showcase of the outputs possible with the {chronicle} R package. For a complete how-to, please refer to the package’s github page.
Barplots
chronicle::add_barplot()
Bars broken by other group
Bars sorted by value and broken by another column
Boxplots
chronicle::add_boxplot()
Code
chronicle::add_code()
This is an empty canvas for you to include any code you want.
This is some code:
data.table(iris)[, .N, Species]
It can also be evaluated!
library(data.table)
data.table(iris)[, .N, Species]
Densities
chronicle::add_density()
dygraphs
chronicle::add_dygraph()
Simple dygraph (in static outputs it will be replaced by line plots)
Histograms()
chronicle::add_histogram
Faceted histogram by groups
Line plots
chronicle::add_lineplot()
Line plot with linear trend
Rain cloud plots
chronicle::add_raincloud()
With the mean instead of the boxplot
Scatter plots
chronicle::add_scatterplot()
Faceted scatter plot with trend
Tables
chronicle::add_table()
kable
| 5.1 |
3.5 |
1.4 |
0.2 |
setosa |
| 4.9 |
3.0 |
1.4 |
0.2 |
setosa |
| 4.7 |
3.2 |
1.3 |
0.2 |
setosa |
| 4.6 |
3.1 |
1.5 |
0.2 |
setosa |
| 5.0 |
3.6 |
1.4 |
0.2 |
setosa |
| 5.4 |
3.9 |
1.7 |
0.4 |
setosa |
Violins
chronicle::add_violin()
Big Bonus! report_columns()
chronicle also includes a function called report_columns(), that will create an entire chronicle report for a single dataset. It includes a comprehensive summary of the data through the skimr::skim() function, along with one plot for each column present in the data: bar plots for categorical variables and rain cloud plots for numerical variables. This gives you an immediate view of a dataset with a single line of code!
report_columns(dt = palmerpenguins::penguins,
by_column = 'species')
you can see the example of this output here
sessionInfo
sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] stringr_1.4.0 chronicle_0.2.5 data.table_1.13.6 magrittr_2.0.1 rlang_0.4.10
loaded via a namespace (and not attached):
[1] tufte_0.9 lattice_0.20-41 tidyr_1.1.2 ps_1.5.0 zoo_1.8-8 digest_0.6.27
[7] R6_2.5.0 evaluate_0.14 httr_1.4.2 xaringan_0.19 ggplot2_3.3.3 highr_0.8
[13] pillar_1.4.7 tictoc_1.0 lazyeval_0.2.2 rstudioapi_0.13 callr_3.5.1 Matrix_1.2-18
[19] DT_0.17 rmarkdown_2.6 labeling_0.4.2 splines_4.0.3 webshot_0.5.2 flexdashboard_0.5.2
[25] rolldown_0.1 readr_1.4.0 htmlwidgets_1.5.3 munsell_0.5.0 tinytex_0.28 compiler_4.0.3
[31] xfun_0.20 pkgconfig_2.0.3 mgcv_1.8-33 htmltools_0.5.0 tidyselect_1.1.0 tibble_3.0.4
[37] gridExtra_2.3 bookdown_0.21 viridisLite_0.3.0 crayon_1.3.4 dplyr_1.0.2 withr_2.3.0
[43] grid_4.0.3 nlme_3.1-151 jsonlite_1.7.2 gtable_0.3.0 lifecycle_0.2.0 scales_1.1.1
[49] rmdformats_1.0.1 stringi_1.5.3 farver_2.0.3 viridis_0.5.1 dygraphs_1.1.1.6 ellipsis_0.3.1
[55] xts_0.12.1 generics_0.1.0 vctrs_0.3.6 tools_4.0.3 glue_1.4.2 purrr_0.3.4
[61] hms_0.5.3 crosstalk_1.1.0.1 prettydoc_0.4.1 processx_3.4.5 yaml_2.2.1 colorspace_2.0-0
[67] plotly_4.9.3 knitr_1.31 pagedown_0.13
LS0tCnRpdGxlOiAgY2hyb25pY2xlIFNob3djYXNlCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKYXV0aG9yOiAgUGhpbGlwcGUgSGV5bWFucyBTbWl0aApvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3IsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9CmxpYnJhcnkoY2hyb25pY2xlKQpzZXRfc3RhdGljIDwtIEZBTFNFCmZpZ3VyZV93aWR0aCA8LSA5CmZpZ3VyZV9oZWlnaHQgPC0gNQojIElmIHlvdSB3YW50IHRoaXMgcmVwb3J0IHRvIGJlIHJlcHJvZHVjaWJsZSwgYWRkIG9uIHRoaXMgY2h1bmsgYWxsCiMgdGhlIGxpYnJhcmllcywgZGF0YSBsb2FkaW5nIGFuZCBwcmVwcm9jZXNzaW5nIGRvbmUgYmVmb3JlIGV4ZWN1dGluZwojIHRoZSBjaHJvbmljbGUgcmVwb3J0LgoKYGBgCgoKIyBUaGlzIGlzIGhvdyBhIGNocm9uaWNsZSByZXBvcnQgbG9va3MKClRoaXMgaXMgYSBzaG93Y2FzZSBvZiB0aGUgb3V0cHV0cyBwb3NzaWJsZSB3aXRoIHRoZSBce2Nocm9uaWNsZVx9IFIgcGFja2FnZS4gRm9yIGEgY29tcGxldGUgaG93LXRvLCBwbGVhc2UgcmVmZXIgdG8gdGhlIHBhY2thZ2UncyBbZ2l0aHViIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9waGV5bWFuc3MvY2hyb25pY2xlKS4KYGBge3IsIGV2YWw9VFJVRSwgZWNobz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQpkYXQgPC0gZGF0YS5mcmFtZSh4ID0gYyhybm9ybSgxMDAsIDIsIDQpLAogICAgICAgIHJub3JtKDEwMCwgNiwgMSksCiAgICAgICAgcm5vcm0oMTAwLCA4LCAyKSksCiAgZ3JvdXAgPSBjKHJlcCgnQScsIDEwMCksCiAgICAgICAgICAgIHJlcCgnQicsIDEwMCksCiAgICAgICAgICAgIHJlcCgnQycsIDEwMCkpLAogIGRhdGUgPSByZXAoc2VxKGFzLkRhdGUoJzIwMjAtMDEtMDEnKSwKICAgICAgICAgICAgICAgICBhcy5EYXRlKCcyMDIwLTA0LTA5JyksCiAgICAgICAgICAgICAgICAgJ2RheXMnKSwKICAgICAgICAgICAgIDMpKQpgYGAKCiMgQmFycGxvdHMKCiMjIyBgY2hyb25pY2xlOjphZGRfYmFycGxvdCgpYAoKIyMgU2ltcGxlIGJhciBwbG90CmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfYmFycGxvdChkdCA9IGlyaXMsIGJhcnMgPSAnU3BlY2llcycsCiAgdmFsdWUgPSAnU2VwYWwuTGVuZ3RoJywKICBob3Jpem9udGFsID0gJ0ZBTFNFJywKICBzb3J0X2J5X3ZhbHVlID0gJ0ZBTFNFJywKICBzb3J0X2RlY3JlYXNpbmcgPSAnVFJVRScsCiAgZ2d0aGVtZSA9ICdtaW5pbWFsJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBCYXJzIGJyb2tlbiBieSBvdGhlciBncm91cApgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX2JhcnBsb3QoZHQgPSBnZ3Bsb3QyOjptcGcsIGJhcnMgPSAnbWFudWZhY3R1cmVyJywKICB2YWx1ZSA9ICdjdHknLAogIGJyZWFrX2JhcnNfYnkgPSAndHJhbnMnLAogIGhvcml6b250YWwgPSAnRkFMU0UnLAogIHNvcnRfYnlfdmFsdWUgPSAnRkFMU0UnLAogIHNvcnRfZGVjcmVhc2luZyA9ICdUUlVFJywKICBnZ3RoZW1lID0gJ21pbmltYWwnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIEJhcnMgc29ydGVkIGJ5IHZhbHVlCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfYmFycGxvdChkdCA9IGdncGxvdDI6Om1wZywgYmFycyA9ICdtYW51ZmFjdHVyZXInLAogIHZhbHVlID0gJ2N0eScsCiAgaG9yaXpvbnRhbCA9ICdGQUxTRScsCiAgc29ydF9ieV92YWx1ZSA9ICdUUlVFJywKICBzb3J0X2RlY3JlYXNpbmcgPSAnVFJVRScsCiAgZ2d0aGVtZSA9ICdtaW5pbWFsJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBCYXJzIHNvcnRlZCBieSB2YWx1ZSBhbmQgYnJva2VuIGJ5IGFub3RoZXIgY29sdW1uCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfYmFycGxvdChkdCA9IGdncGxvdDI6Om1wZywgYmFycyA9ICdtYW51ZmFjdHVyZXInLAogIHZhbHVlID0gJ2N0eScsCiAgYnJlYWtfYmFyc19ieSA9ICd0cmFucycsCiAgaG9yaXpvbnRhbCA9ICdGQUxTRScsCiAgc29ydF9ieV92YWx1ZSA9ICdUUlVFJywKICBzb3J0X2RlY3JlYXNpbmcgPSAnVFJVRScsCiAgZ2d0aGVtZSA9ICdtaW5pbWFsJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBIb3Jpem9udGFsbHkKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9iYXJwbG90KGR0ID0gZ2dwbG90Mjo6bXBnLCBiYXJzID0gJ21hbnVmYWN0dXJlcicsCiAgdmFsdWUgPSAnY3R5JywKICBicmVha19iYXJzX2J5ID0gJ3RyYW5zJywKICBob3Jpem9udGFsID0gJ1RSVUUnLAogIHNvcnRfYnlfdmFsdWUgPSAnVFJVRScsCiAgc29ydF9kZWNyZWFzaW5nID0gJ1RSVUUnLAogIGdndGhlbWUgPSAnbWluaW1hbCcsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyBCb3hwbG90cwoKIyMjIGBjaHJvbmljbGU6OmFkZF9ib3hwbG90KClgCgojIyBTaW1wbGUgYm94IHBsb3QKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9ib3hwbG90KGR0ID0gaXJpcywgdmFsdWUgPSAnU2VwYWwuTGVuZ3RoJywKICBqaXR0ZXIgPSAnRkFMU0UnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIEJveCBwbG90IGJ5IGdyb3VwcwpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX2JveHBsb3QoZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBqaXR0ZXIgPSAnRkFMU0UnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIEJveCBwbG90IHdpdGggaml0dGVyCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfYm94cGxvdChkdCA9IGlyaXMsIHZhbHVlID0gJ1NlcGFsLkxlbmd0aCcsCiAgZ3JvdXBzID0gJ1NwZWNpZXMnLAogIGppdHRlciA9ICdUUlVFJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIENvZGUKCiMjIyBgY2hyb25pY2xlOjphZGRfY29kZSgpYAoKVGhpcyBpcyBhbiBlbXB0eSBjYW52YXMgZm9yIHlvdSB0byBpbmNsdWRlIGFueSBjb2RlIHlvdSB3YW50LgoKIyMjIFRoaXMgaXMgc29tZSBjb2RlOgpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1UUlVFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9CmRhdGEudGFibGUoaXJpcylbLCAuTiwgU3BlY2llc10KYGBgCgojIyMgSXQgY2FuIGFsc28gYmUgZXZhbHVhdGVkIQpgYGB7ciwgZXZhbD1UUlVFLCBlY2hvPVRSVUUsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbGlicmFyeShkYXRhLnRhYmxlKQpkYXRhLnRhYmxlKGlyaXMpWywgLk4sIFNwZWNpZXNdCmBgYAoKIyBEZW5zaXRpZXMKCiMjIyBgY2hyb25pY2xlOjphZGRfZGVuc2l0eSgpYAoKIyMgQmFzaWMgZGVuc2l0eQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX2RlbnNpdHkoZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGZhY2V0ZWQgPSAnVFJVRScsCiAgc2NhbGVzID0gJ2ZpeGVkJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBEZW5zaXR5IGJ5IGdyb3VwCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfZGVuc2l0eShkdCA9IGlyaXMsIHZhbHVlID0gJ1NlcGFsLkxlbmd0aCcsCiAgZ3JvdXBzID0gJ1NwZWNpZXMnLAogIGZhY2V0ZWQgPSAnRkFMU0UnLAogIHNjYWxlcyA9ICdmaXhlZCcsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyMgRmFjZXRlZCBkZW5zaXRpZXMKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9kZW5zaXR5KGR0ID0gaXJpcywgdmFsdWUgPSAnU2VwYWwuTGVuZ3RoJywKICBncm91cHMgPSAnU3BlY2llcycsCiAgZmFjZXRlZCA9ICdUUlVFJywKICBzY2FsZXMgPSAnZml4ZWQnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMgZHlncmFwaHMKCiMjIyBgY2hyb25pY2xlOjphZGRfZHlncmFwaCgpYAoKIyMgU2ltcGxlIGR5Z3JhcGggKGluIHN0YXRpYyBvdXRwdXRzIGl0IHdpbGwgYmUgcmVwbGFjZWQgYnkgbGluZSBwbG90cykKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9keWdyYXBoKGR0ID0gZGF0LCB2YWx1ZSA9ICd4JywKICBkYXRlID0gJ2RhdGUnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIER5Z3JhcGggYnkgZ3JvdXBzCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfZHlncmFwaChkdCA9IGRhdCwgdmFsdWUgPSAneCcsCiAgZGF0ZSA9ICdkYXRlJywKICBncm91cHMgPSAnZ3JvdXAnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMgSGlzdG9ncmFtcygpCgojIyMgYGNocm9uaWNsZTo6YWRkX2hpc3RvZ3JhbWAKCiMjIEJhc2ljIGhpc3RvZ3JhbQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX2hpc3RvZ3JhbShkdCA9IGlyaXMsIHZhbHVlID0gJ1NlcGFsLkxlbmd0aCcsCiAgc2NhbGVzID0gJ2ZpeGVkJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBGYWNldGVkIGhpc3RvZ3JhbSBieSBncm91cHMKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9oaXN0b2dyYW0oZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBzY2FsZXMgPSAnZml4ZWQnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMgTGluZSBwbG90cwoKIyMjIGBjaHJvbmljbGU6OmFkZF9saW5lcGxvdCgpYAoKIyMgU2ltcGxlIGxpbmUgcGxvdApgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX2xpbmVwbG90KGR0ID0gZGF0LCB4ID0gJ2RhdGUnLAogIHkgPSAneCcsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyMgTGluZSBwbG90IHdpdGggdHJlbmQKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9saW5lcGxvdChkdCA9IGRhdCwgeCA9ICdkYXRlJywKICB5ID0gJ3gnLAogIGdyb3VwcyA9ICdncm91cCcsCiAgZmFjZXRlZCA9ICdGQUxTRScsCiAgc2hvd190cmVuZCA9ICdUUlVFJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBMaW5lIHBsb3Qgd2l0aCBsaW5lYXIgdHJlbmQKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9saW5lcGxvdChkdCA9IGRhdCwgeCA9ICdkYXRlJywKICB5ID0gJ3gnLAogIGdyb3VwcyA9ICdncm91cCcsCiAgZmFjZXRlZCA9ICdGQUxTRScsCiAgc2hvd190cmVuZCA9ICdUUlVFJywKICB0cmVuZF9tZXRob2QgPSAnbG0nLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIEZhY2V0ZWQgbGluZSBwbG90CmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfbGluZXBsb3QoZHQgPSBkYXQsIHggPSAnZGF0ZScsCiAgeSA9ICd4JywKICBncm91cHMgPSAnZ3JvdXAnLAogIGZhY2V0ZWQgPSAnVFJVRScsCiAgc2hvd190cmVuZCA9ICdUUlVFJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIFJhaW4gY2xvdWQgcGxvdHMKCiMjIyBgY2hyb25pY2xlOjphZGRfcmFpbmNsb3VkKClgCgojIyBTaW1wbGUgcmFpbiBjbG91ZApgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX3JhaW5jbG91ZChkdCA9IGlyaXMsIHZhbHVlID0gJ1NlcGFsLkxlbmd0aCcsCiAgYWRqdXN0ID0gJzAuNScsCiAgaW5jbHVkZV9ib3hwbG90ID0gJ1RSVUUnLAogIGluY2x1ZGVfbWVhbiA9ICdGQUxTRScsCiAgaW5jbHVkZV9tZWRpYW4gPSAnVFJVRScsCiAgZm9yY2VfYWxsX2ppdHRlcl9vYnMgPSAnRkFMU0UnLAogIGdndGhlbWUgPSAnbWluaW1hbCcsCiAgcGxvdF9wYWxldHRlX2dlbmVyYXRvciA9ICdwbGFzbWEnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIFJhaW4gY2xvdWQgYnkgZ3JvdXAKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9yYWluY2xvdWQoZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBhZGp1c3QgPSAnMC41JywKICBpbmNsdWRlX2JveHBsb3QgPSAnVFJVRScsCiAgaW5jbHVkZV9tZWFuID0gJ0ZBTFNFJywKICBpbmNsdWRlX21lZGlhbiA9ICdUUlVFJywKICBmb3JjZV9hbGxfaml0dGVyX29icyA9ICdGQUxTRScsCiAgZ2d0aGVtZSA9ICdtaW5pbWFsJywKICBwbG90X3BhbGV0dGVfZ2VuZXJhdG9yID0gJ3BsYXNtYScsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyMgTGFyZ2VyIGRlbmlzdHkga2VybmVsCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfcmFpbmNsb3VkKGR0ID0gaXJpcywgdmFsdWUgPSAnU2VwYWwuTGVuZ3RoJywKICBncm91cHMgPSAnU3BlY2llcycsCiAgYWRqdXN0ID0gJzEnLAogIGluY2x1ZGVfYm94cGxvdCA9ICdUUlVFJywKICBpbmNsdWRlX21lYW4gPSAnRkFMU0UnLAogIGluY2x1ZGVfbWVkaWFuID0gJ1RSVUUnLAogIGZvcmNlX2FsbF9qaXR0ZXJfb2JzID0gJ0ZBTFNFJywKICBnZ3RoZW1lID0gJ21pbmltYWwnLAogIHBsb3RfcGFsZXR0ZV9nZW5lcmF0b3IgPSAncGxhc21hJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBObyBib3hwbG90LCBqdXN0IHRoZSBtZWRpYW4KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9yYWluY2xvdWQoZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBhZGp1c3QgPSAnMScsCiAgaW5jbHVkZV9ib3hwbG90ID0gJ0ZBTFNFJywKICBpbmNsdWRlX21lYW4gPSAnRkFMU0UnLAogIGluY2x1ZGVfbWVkaWFuID0gJ1RSVUUnLAogIGZvcmNlX2FsbF9qaXR0ZXJfb2JzID0gJ0ZBTFNFJywKICBnZ3RoZW1lID0gJ21pbmltYWwnLAogIHBsb3RfcGFsZXR0ZV9nZW5lcmF0b3IgPSAncGxhc21hJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBXaXRoIHRoZSBtZWFuIGluc3RlYWQgb2YgdGhlIGJveHBsb3QKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9yYWluY2xvdWQoZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBhZGp1c3QgPSAnMScsCiAgaW5jbHVkZV9ib3hwbG90ID0gJ0ZBTFNFJywKICBpbmNsdWRlX21lYW4gPSAnVFJVRScsCiAgaW5jbHVkZV9tZWRpYW4gPSAnRkFMU0UnLAogIGZvcmNlX2FsbF9qaXR0ZXJfb2JzID0gJ0ZBTFNFJywKICBnZ3RoZW1lID0gJ21pbmltYWwnLAogIHBsb3RfcGFsZXR0ZV9nZW5lcmF0b3IgPSAncGxhc21hJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIFNjYXR0ZXIgcGxvdHMKCiMjIyBgY2hyb25pY2xlOjphZGRfc2NhdHRlcnBsb3QoKWAKCiMjIFNpbXBsZSBzY2F0dGVyIHBsb3QKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9zY2F0dGVycGxvdChkdCA9IGlyaXMsIHggPSAnU2VwYWwuTGVuZ3RoJywKICB5ID0gJ1NlcGFsLldpZHRoJywgc3RhdGljID0gc2V0X3N0YXRpYykKYGBgCgojIyBTY2F0dGVyIHBsb3Qgd2l0aCBncm91cHMKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV9zY2F0dGVycGxvdChkdCA9IGlyaXMsIHggPSAnU2VwYWwuTGVuZ3RoJywKICB5ID0gJ1NlcGFsLldpZHRoJywKICBncm91cHMgPSAnU3BlY2llcycsCiAgZmFjZXRlZCA9ICdGQUxTRScsCiAgc2hvd190cmVuZCA9ICdGQUxTRScsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyMgRmFjZXRlZCBzY2F0dGVyIHBsb3Qgd2l0aCB0cmVuZApgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQptYWtlX3NjYXR0ZXJwbG90KGR0ID0gaXJpcywgeCA9ICdTZXBhbC5MZW5ndGgnLAogIHkgPSAnU2VwYWwuV2lkdGgnLAogIGdyb3VwcyA9ICdTcGVjaWVzJywKICBmYWNldGVkID0gJ1RSVUUnLAogIHNob3dfdHJlbmQgPSAnVFJVRScsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyBUYWJsZXMKCiMjIyBgY2hyb25pY2xlOjphZGRfdGFibGUoKWAKCiMjIyBrYWJsZQoKYGBge3IsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9CmtuaXRyOjprYWJsZShoZWFkKGlyaXMpKQpgYGAKCiMjIyBEVAoKYGBge3IsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9CkRUOjpkYXRhdGFibGUoaGVhZChpcmlzKSkKYGBgCgojIFZpb2xpbnMKCiMjIyBgY2hyb25pY2xlOjphZGRfdmlvbGluKClgCgojIyBTaW1wbGUgdmlvbGluIHBsb3QKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KbWFrZV92aW9saW4oZHQgPSBpcmlzLCB2YWx1ZSA9ICdTZXBhbC5MZW5ndGgnLCBzdGF0aWMgPSBzZXRfc3RhdGljKQpgYGAKCiMjIFZpb2xpbiBwbG90IGJ5IGdyb3VwCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9ZmlndXJlX3dpZHRoLCBmaWcuaGVpZ2h0PWZpZ3VyZV9oZWlnaHR9Cm1ha2VfdmlvbGluKGR0ID0gaXJpcywgdmFsdWUgPSAnU2VwYWwuTGVuZ3RoJywKICBncm91cHMgPSAnU3BlY2llcycsIHN0YXRpYyA9IHNldF9zdGF0aWMpCmBgYAoKIyBCaWcgQm9udXMhIHJlcG9ydF9jb2x1bW5zKCkKCmNocm9uaWNsZSBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb24gY2FsbGVkIHJlcG9ydF9jb2x1bW5zKCksIHRoYXQgd2lsbCBjcmVhdGUgYW4gZW50aXJlCmNocm9uaWNsZSByZXBvcnQgZm9yIGEgc2luZ2xlIGRhdGFzZXQuIEl0IGluY2x1ZGVzIGEgY29tcHJlaGVuc2l2ZSBzdW1tYXJ5IG9mIHRoZSBkYXRhIHRocm91Z2ggdGhlCnNraW1yOjpza2ltKCkgZnVuY3Rpb24sIGFsb25nIHdpdGggb25lIHBsb3QgZm9yIGVhY2ggY29sdW1uIHByZXNlbnQgaW4gdGhlIGRhdGE6IGJhciBwbG90cyBmb3IgY2F0ZWdvcmljYWwKdmFyaWFibGVzIGFuZCByYWluIGNsb3VkIHBsb3RzIGZvciBudW1lcmljYWwgdmFyaWFibGVzLiBUaGlzIGdpdmVzIHlvdSBhbiBpbW1lZGlhdGUgdmlldyBvZiBhIGRhdGFzZXQgd2l0aCBhCnNpbmdsZSBsaW5lIG9mIGNvZGUhCmBgYHtyLCBldmFsPUZBTFNFLCBlY2hvPVRSVUUsIGZpZy53aWR0aD1maWd1cmVfd2lkdGgsIGZpZy5oZWlnaHQ9ZmlndXJlX2hlaWdodH0KcmVwb3J0X2NvbHVtbnMoZHQgPSBwYWxtZXJwZW5ndWluczo6cGVuZ3VpbnMsCiAgICAgICAgICAgICAgIGJ5X2NvbHVtbiA9ICdzcGVjaWVzJykKYGBgCgp5b3UgY2FuIHNlZSB0aGUgZXhhbXBsZSBvZiB0aGlzIG91dHB1dCBbaGVyZV0oaHR0cHM6Ly9waGV5bWFuc3MuZ2l0aHViLmlvL2Nocm9uaWNsZS1kZW1vcy9yZXBvcnRfY29sdW1ucykKCiMjIHNlc3Npb25JbmZvCmBgYHtyLCBldmFsPVRSVUUsIGVjaG89VFJVRSwgZmlnLndpZHRoPWZpZ3VyZV93aWR0aCwgZmlnLmhlaWdodD1maWd1cmVfaGVpZ2h0fQpzZXNzaW9uSW5mbygpCmBgYAo=